package com.gzx.plugin.tjzy.modular.product.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.gzx.plugin.tjzy.core.entity.CustomVo;
import com.gzx.plugin.tjzy.modular.product.entity.bo.GzxProductBo;
import com.gzx.plugin.tjzy.modular.product.entity.bo.GzxProductIdBo;
import com.gzx.plugin.tjzy.modular.product.entity.bo.GzxProductQueryBo;
import com.gzx.plugin.tjzy.modular.product.entity.vo.GzxProductVo;
import com.gzx.plugin.tjzy.modular.product.service.GzxProductService;
import jakarta.validation.constraints.NotNull;
import lombok.RequiredArgsConstructor;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import vip.xiaonuo.common.annotation.CommonLog;
import vip.xiaonuo.common.pojo.CommonResult;

import java.util.List;

/**
 * 委托公司产品
 * 前端访问路由地址为:/tjzy/product
 */
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/tjzy/product")
public class GzxProductController {

    private final GzxProductService gzxProductService;

    /**
     * 查询委托公司产品列表
     */
    @PostMapping("/pageList")
    public CommonResult<Page<GzxProductVo>> pageList(@RequestBody GzxProductQueryBo bo) {
        return CommonResult.data(gzxProductService.pageList(bo));
    }

    /**
     * 获取委托公司产品详细信息
     *
     * @param id 主键
     */
    @GetMapping("/{id}")
    public CommonResult<GzxProductVo> getInfo(@NotNull(message = "主键不能为空")
                                   @PathVariable Long id) {
        return CommonResult.data(gzxProductService.queryById(id));
    }

    /**
     * 导出委托公司产品列表
     */
    @GetMapping("/listAll")
    public CommonResult<List<CustomVo>> listAll(@RequestParam boolean flag, @RequestParam String val) {
        return CommonResult.data(gzxProductService.listAll(flag, val));
    }

    /**
     * 新增委托公司产品
     */
    @CommonLog("新增委托公司产品")
    @PostMapping("/add")
    public CommonResult<Void> add(@RequestBody GzxProductBo bo) {
        gzxProductService.insertByBo(bo);
        return CommonResult.ok();
    }

    /**
     * 修改委托公司产品
     */
    @CommonLog("修改委托公司产品")
    @PostMapping("/edit")
    public CommonResult<Void> edit(@RequestBody GzxProductBo bo) {
        gzxProductService.updateByBo(bo);
        return CommonResult.ok();
    }

    /**
     * 删除委托公司产品
     *
     * @param productIdBo 主键串
     */
    @CommonLog("删除委托公司产品")
    @PostMapping("/del")
    public CommonResult<Void> remove(@RequestBody GzxProductIdBo productIdBo) {
        gzxProductService.deleteWithValidByIds(productIdBo);
        return CommonResult.ok();
    }
}
